//
//  NSObject+LJMKVO.m
//  CustomKVO
//
//  Created by 岚海网络 on 2018/11/23.
//  Copyright © 2018年 岚海网络. All rights reserved.
//

#import "NSObject+LJMKVO.h"
#import <objc/message.h>

@implementation NSObject (LJMKVO)

- (void)LJM_addObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options context:(void *)context
{
    //1、创建一个类
    NSString *oldClassName = NSStringFromClass(self.class);
    NSString *newClassName = [@"LJMKVO" stringByAppendingString:oldClassName];
    
    Class MyClass = objc_allocateClassPair(self.class, newClassName.UTF8String , 0);
    
        /* 不能直接使用，需要先注册类 */
    objc_registerClassPair(MyClass);
    
    //2、重写setter方法(子类并没有父类的方法，只是子类继承了父类的方法，isa指针在子类中找不到方法时候回去父类中调用，并不能说明子类中就有这个方法)
            /* 所以说这里的“重写”子类的方法，就是在子类中添加方法 */
    /**
     * param:class 给哪个类添加方法
     * param:sel 方法编号
     * param:imp 方法实现（函数指针！）
     * param:type 返回值类型
     * return:<#返回值#>
     */
    class_addMethod(MyClass, @selector(setName:), (IMP)setName, "v@:@");
    
    //3、修改isa指针
    
}

void setName()
{
    
}

@end
